/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.inf.ufg.model;

import br.inf.ufg.factory.ConexaoFactoryMySql;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

/**
 *
 * @author umarley.faria
 */
public class AssentosDAO {

    private final Connection con;
    private final Statement stmt;
    private final Statement stmtNavegar;
    private ResultSet rsNavegar;

    // # metodo construtor 
    public AssentosDAO() throws ClassNotFoundException, SQLException {

        con = ConexaoFactoryMySql.getConnection();
        stmt = con.createStatement();
        stmtNavegar = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_UPDATABLE);
        rsNavegar = stmtNavegar.executeQuery("SELECT * FROM assentos");

    }

    // # primeiro assento 
    public Assentos primeiro() throws SQLException {
        if (rsNavegar.first()) {
            Assentos assento = new Assentos();

            assento.setLocal(rsNavegar.getInt("LOCAL"));
            assento.setCodigo(rsNavegar.getString("CODIGO"));
            assento.setTipo(rsNavegar.getInt("TIPO"));

            return assento;

        } else {
            return null;
        }

    }

    // # assento anterior 
    public Assentos anterior() throws SQLException {

        if (!rsNavegar.isFirst()) {
            rsNavegar.previous();
            Assentos assento = new Assentos();

            assento.setLocal(rsNavegar.getInt("LOCAL"));
            assento.setCodigo(rsNavegar.getString("CODIGO"));
            assento.setTipo(rsNavegar.getInt("TIPO"));

            return assento;
        } else {
            return null;
        }

    }

    // # proximo assento 
    public Assentos proximo() throws SQLException {
        if (!rsNavegar.isLast()) {
            rsNavegar.next();

            Assentos assento = new Assentos();

            assento.setLocal(rsNavegar.getInt("LOCAL"));
            assento.setCodigo(rsNavegar.getString("CODIGO"));
            assento.setTipo(rsNavegar.getInt("TIPO"));

            return assento;

        } else {
            return null;
        }
    }

    // # ultimo assento 
    public Assentos ultimo() throws SQLException {
        if (rsNavegar.last()) {
            Assentos assento = new Assentos();

            assento.setLocal(rsNavegar.getInt("LOCAL"));
            assento.setCodigo(rsNavegar.getString("CODIGO"));
            assento.setTipo(rsNavegar.getInt("TIPO"));

            return assento;
        } else {
            return null;
        }

    }

      // # 
    // # funcoes de comunicacao com o banco de dados 
    // # 
    public Assentos pesquisarAssento(String local, String codigo) throws SQLException {

        String SQL = "SELECT * FROM assentos WHERE LOCAL = " + local + " AND CODIGO = " + codigo + "";
        ResultSet rs = stmt.executeQuery(SQL);

        if (rs.next()) {
            Assentos assento = new Assentos();

            assento.setLocal(rsNavegar.getInt("LOCAL"));
            assento.setCodigo(rsNavegar.getString("CODIGO"));
            assento.setTipo(rsNavegar.getInt("TIPO"));

            return assento;
        } else {
            return null;
        }
    }

    // # excluir registro 
    public boolean excluirRegistro(String local, String codigo) throws SQLException {
        String SQL = "DELETE FROM assentos WHERE LOCAL = " + local + " AND CODIGO = " + codigo + "";
        stmt.executeUpdate(SQL);
        rsNavegar = stmtNavegar.executeQuery("SELECT * FROM assentos");
        return true;
    }

    // # salvar um registro 
    public boolean salvarRegistro(Assentos assento) throws SQLException, Exception {

        int local = assento.getLocal();
        String codigo = assento.getCodigo();
        int tipo = assento.getTipo();

        try {
            String SQL = "INSERT INTO `assentos` "
                    + "(`LOCAL`, `CODIGO`, `TIPO`) "
                    + "VALUES ('" + local + "', '" + codigo + "', '" + tipo + "')";

            System.out.println(SQL);
            
            stmt.executeUpdate(SQL);
            rsNavegar = stmtNavegar.executeQuery("SELECT * FROM assentos");

            return true;

        } catch (SQLException e) {
            throw new Exception("Erro ao inserir dados. Tente novamente " + e.getMessage());

        }

    }

    public Assentos pesquisarAssento(String param) throws SQLException {

        ResultSet rs = stmt.executeQuery("SELECT * FROM asssentos WHERE CODIGO LIKE '%" + param + "%'");

        if (rs.next()) {
            Assentos assento = new Assentos();
            assento.setCodigo(rs.getString("CODIGO"));
            assento.setLocal(rs.getInt("LOCAL"));
            assento.setTipo(rs.getInt("TIPO"));

            return assento;
        } else {
            return null;
        }
    }

    public Assentos getAssentoByTipo(int tipo) throws SQLException {

        ResultSet rs = stmt.executeQuery("SELECT  * FROM `local` WHERE TIPO = '" + tipo + "'");

        if (rs.next()) {
            Assentos assento = new Assentos();
            assento.setCodigo(rs.getString("CODIGO"));
            assento.setLocal(rs.getInt("LOCAL"));
            assento.setTipo(rs.getInt("TIPO"));

            return assento;
        } else {
            return null;
        }

    }

    public Assentos getAssentoByLocal(int local) throws SQLException {

        ResultSet rs = stmt.executeQuery("SELECT  * FROM `local` WHERE LOCAL = '" + local + "'");

        if (rs.next()) {
            Assentos assento = new Assentos();
            assento.setCodigo(rs.getString("CODIGO"));
            assento.setLocal(rs.getInt("LOCAL"));
            assento.setTipo(rs.getInt("TIPO"));

            return assento;
        } else {
            return null;
        }

    }

    public boolean excluirRegistro(Assentos assento) throws SQLException {

        stmt.executeUpdate("DELETE FROM assentos WHERE LOCAL = " + assento.getLocal() +" AND CODIGO = " + assento.getCodigo()) ;
        rsNavegar = stmtNavegar.executeQuery("SELECT * FROM assentos");
        return true;
    }

    public ArrayList<Assentos> ListarAssentos() throws SQLException {
        Statement stmtListar = con.createStatement();
        ResultSet rsListar = stmtListar.executeQuery("SELECT * FROM assentos");

        ArrayList<Assentos> retorno = new ArrayList<Assentos>();

        while (rsListar.next()) {
            int local = rsListar.getInt("LOCAL");
            String codigo = rsListar.getString("CODIGO");
            int tipo = rsListar.getInt("TIPO");

            Assentos assentos = new Assentos();
            assentos.setLocal(local);
            assentos.setCodigo(codigo);
            assentos.setTipo(tipo);

            retorno.add(assentos);
        }

        return retorno;
    }

}
